import {
    reqLogin, reqUserInfo, reqUserList,reqUpdateUserInfo,reqUpdateUserStatus,reqCreateUser,reqSetUserFilePublic,reqGetLogList
} from "@/api"
import { removeItem, setItem } from "@/common/utils/cookieUtil"
// state：仓库存储数据的地方
const state = {
    // 当前登录的用户信息
    userInfo: {},
    // 当前登录的用户身份
    role: [],
    // 用户列表
    userList: [],
    // 用户后台菜单
    userAdminMenu: [],

}
// mutations：修改state的唯一手段，因此第一个参数必须是state，第二个参数为将要修改的数据
const mutations = {
    setUserInfo(state, res) {
        state.userInfo = res
    },
    setRole(state, role) {
        state.role = role
    },
    setUserList(state, res) {
        state.userList = res
    },
    setUserAdminMenu(state, res) {
        state.userAdminMenu = res
    },
    setUserAvatar(state, res) {
        state.userInfo.avatar = res
    }
}
// action：书写业务逻辑（method方法）
const actions = {
    // 获取用户信息
    async getUserInfo({ commit }, data) {
        let res = await reqUserInfo(data)
        if (res.success) {
            commit('setUserInfo', res.data)
            commit('setMenuInfo', res.data.menuList)
            commit('setRole', res.data.role)
        }
        return res
    },
    // 登录
    async getLogin({ commit }, data) {
        let res = await reqLogin(data)
        if (res.success) {
            // 保存token
            setItem("token", res.data)
        }
        return res
    },
    // 退出登录
    async logout({ commit }) {
        removeItem("token")
        removeItem("identify")
    },
    // 获取用户列表信息
    async getUserList({ commit }, data) {
        return await reqUserList(data)
    },
    // 更改用户信息
    async updateUserInfo({ commit }, data) {
        return await reqUpdateUserInfo(data)
    },
    // 更改用户状态
    async updateUserStatus({ commit }, data) {
        return await reqUpdateUserStatus(data)
    },
    // 新增用户
    async createUser({ commit }, data) {
        return await reqCreateUser(data)
    },
    // 根据用户关闭该用户的文件评论权限
    async setUserFilePublic({ commit }, data) {
        return await reqSetUserFilePublic(data)
    },
    // 登录日志
    async getLogList({ commit }, data) {
        return await reqGetLogList(data)
    },
}
// getters：计算属性
const getters = {
    username: state => {
        return state.userInfo.username
    },
}

export default {
    state,
    mutations,
    actions,
    getters
}